<?php
/**
 * The MIT License
 *
 * Copyright (c) <year> <copyright holders>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 *
 * @author Damiano Ciarla
 * @package lib
 * @subpackage validator/base
 */
class BXDValidator
{
	/**
	 * Controllo della validità della URL
	 */
	const CHECK_URL						= "Url";

	/**
	 * Controllo della validità dell'email
	 */
	const CHECK_EMAIL					= "Email";

	/**
	 * Controllo della validità dell'ip
	 */
	const CHECK_IP						= "IP";

	/**
	 * Controllo della validità della carta di credito
	 */
	const CHECK_CREDIT_CARD				= "CreditCard";

	/**
	 * Controllo della validità della carta di credito America Express
	 */
	const CHECK_CC_AMERICAN_EXPRESS		= "CcAmericanExpress";

	/**
	 * Controllo della validità della carta di credito Discover
	 */
	const CHECK_CC_DISCOVER				= "CcDiscover";

	/**
	 * Controllo della validità della carta di credito Diners Club
	 */
	const CHECK_CC_DINERS_CLUB			= "CcDinersClub";

	/**
	 * Controllo della validità della carta di credito Master Card
	 */
	const CHECK_CC_MASTER_CARD			= "CcMasterCard";

	/**
	 * Controllo della validità della carta di credito Visa
	 */
	const CHECK_CC_VISA					= "CcVisa";

	/**
	 * Controllo della validità con il formato DATA-ORA
	 */
	const CHECK_DATETIME				= "DateTime";

	/**
	 * Controllo della validità della data. È necessario specificare il formato
	 * nel parametro "extra" del metodo che esegue il controllo
	 *
	 * <code>
	 * Valori possibili per il campo extra:
	 * dd/mm/yy | mm/dd/yy | mm/dd/yyyy | dd/mm/yyyy | yy/mm/dd | yyyy/mm/dd
	 * </code>
	 */
	const CHECK_DATE					= "Date";

	/**
	 * Campo obbligatorio
	 */
	const CHECK_REQUIRED				= "Required";

	/**
	 * Controllo del valore all'interno di una lista di valori possibili
	 */
	const CHECK_IN_VALUE				= "InValue";

	/**
	 * Il campo deve essere un intero
	 */
	const CHECK_INTEGER					= "Integer";

	/**
	 * Il campo deve avere un formato di tipo valuta
	 */
	const CHECK_PRICE					= "Price";

	/**
	 * Il campo deve essere di tipo float e nel parametro "extra" è possibile inserire
	 * il numero di decimali che il valore deve supportare
	 */
	const CHECK_FLOAT					= "Float";

	/**
	 * Il campo deve avere valori decimali
	 */
	const CHECK_DIGIT					= "Digit";

	/**
	 * Il campo può avere solo valori alfanumerici
	 */
	const CHECK_ALPHA_NUMERIC			= "AlphaNumeric";

	/**
	 * Il campo deve avere una lunghezza massima di un tot di caratteri che è
	 * necessario specificare nel parametro "extra"
	 */
	const CHECK_MAX_LENGTH				= "MaxLength";

	/**
	 * Il campo deve avere una lunghezza minima di un tot di caratteri che è
	 * necessario specificare nel parametro "extra"
	 */
	const CHECK_MIN_LENGTH				= "MinLength";

	/**
	 * Il campo non deve superare un valore massimo specificato nel parametro
	 * "extra" del metodo che esegue il controllo
	 */
	const CHECK_MAX_VALUE				= "MaxValue";

	/**
	 * Il campo deve avere un valore minimo specificato nel parametro "extra"
	 * del metodo che esegue il controllo
	 */
	const CHECK_MIN_VALUE				= "MinValue";

	public static function checkUrl($value)
	{
		Bxd::getInstance()->lib("validator")->loadClass("rules/Url");
		$rule = new BXDValidatorCheckUrl($value);
		$rule->validate();
	}

	public static function checkEmail($value)
	{
		Bxd::getInstance()->lib("validator")->loadClass("rules/Email");
		$rule = new BXDValidatorCheckEmail($value);
		$rule->validate();
    }

    public static function checkIP($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Ip");
		$rule = new BXDValidatorCheckIp($value);
		$rule->validate();
    }
	
	public static function checkCreditCard($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CreditCard");
		$rule = new BXDValidatorCheckIp($value);
		$rule->validate();
    }

    public static function checkCcAmericanExpress($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CcAmericanExpress");
		$rule = new BXDValidatorCheckCcAmericanExpress($value);
		$rule->validate();
    }

	public static function checkCcDiscover($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CcDiscover");
		$rule = new BXDValidatorCheckCcDiscover($value);
		$rule->validate();
    }

    public static function checkCcDinersClub($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CcDinersClub");
		$rule = new BXDValidatorCheckCcDinersClub($value);
		$rule->validate();
    }

    public static function checkCcMasterCard($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CcMasterCard");
		$rule = new BXDValidatorCheckCcMasterCard($value);
		$rule->validate();
    }

    public static function checkCcVisa($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/CcVisa");
		$rule = new BXDValidatorCheckCcVisa($value);
		$rule->validate();
    }

	public static function checkDateTime($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/DateTime");
		$rule = new BXDValidatorCheckDateTime($value);
		$rule->validate();
    }

	public static function checkDate($value, $format='yyyy/mm/dd')
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Date");
		$rule = new BXDValidatorCheckDate($value);
		$rule->params($format);
		$rule->validate();
    }

	public static function checkRequired($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Required");
		$rule = new BXDValidatorCheckRequired($value);
		$rule->validate();
    }

	public static function checkInValue($value, $available)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/InValue");
		$rule = new BXDValidatorCheckInValue($value);
		$rule->params($available);
		$rule->validate();
    }

    public static function checkInteger($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Integer");
		$rule = new BXDValidatorCheckInteger($value);
		$rule->validate();
    }
	
    public static function checkPrice($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Price");
		$rule = new BXDValidatorCheckPrice($value);
		$rule->validate();
    }

    public static function checkFloat($value, $decimal = '')
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Float");
		$rule = new BXDValidatorCheckFloat($value);
		$rule->params($decimal);
		$rule->validate();
    }

    public static function checkDigit($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/Digit");
		$rule = new BXDValidatorCheckDigit($value);
		$rule->validate();
    }

    public static function checkAlphaNumeric($value)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/AlphaNumeric");
		$rule = new BXDValidatorCheckAlphaNumeric($value);
		$rule->validate();
    }

    public static function checkMaxLength($value, $length = 0)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/MaxLength");
		$rule = new BXDValidatorCheckMaxLength($value);
		$rule->params($length);
		$rule->validate();
    }
	
    public static function checkMinLength($value, $length = 0)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/MinLength");
		$rule = new BXDValidatorCheckMinLength($value);
		$rule->params($length);
		$rule->validate();
    }

    public static function checkMaxValue($value, $ref = 0)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/MaxValue");
		$rule = new BXDValidatorCheckMaxValue($value);
		$rule->params($ref);
		$rule->validate();
    }

    public static function checkMinValue($value, $ref = 0)
	{
        Bxd::getInstance()->lib("validator")->loadClass("rules/MinValue");
		$rule = new BXDValidatorCheckMinValue($value);
		$rule->params($ref);
		$rule->validate();
    }
}
?>